home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / misc / emu / ATUtilities.lha / ATUtilities / M2 / DOS.MOD < prev    next >
Text File  |  2000-09-26  |  2KB  |  78 lines

  1. IMPLEMENTATION MODULE DOS;
  2.  
  3. FROM SYSTEM  IMPORT ADDRESS,ADR,OFS,SEG;
  4. FROM System  IMPORT FLAGS,ES,DS,SI,DI,AX,BX,CX,DX,Trap,XTrap,carryFlag;
  5. FROM Storage IMPORT ALLOCATE,DEALLOCATE;
  6. FROM Files   IMPORT CreateTemp,Read,Write,Seek,Close,Delete,FileStatus,SeekMode;
  7. FROM GEM     IMPORT gdos;
  8.  
  9. TYPE
  10.  
  11. PROCEDURE OpenTemporaryFile() : FileHandlePtr;
  12. VAR fh    : FileHandlePtr;
  13.     num,i : CARDINAL;
  14. BEGIN
  15.  num := 0FFFFH;
  16.  FOR i := 0 TO 99 DO
  17.   IF (gdos^.tempFile[i]=NIL) THEN
  18.    num := i;
  19.    i := 100;
  20.   END (* IF *);
  21.  END (* FOR *);
  22.  IF (num=0FFFFH) THEN RETURN(NIL); END;
  23.  
  24.  ALLOCATE(fh,SIZE(FileHandle));
  25.  IF (fh=NIL) THEN
  26.   RETURN(NIL);
  27.  END (* IF *);
  28.  
  29.  fh^.name := "";
  30.  CreateTemp(fh^.handle,fh^.name,{});
  31.  IF (FileStatus<>0) THEN
  32.   DEALLOCATE(fh,SIZE(FileHandle));
  33.   RETURN(NIL);
  34.  END (* IF *);
  35.  
  36.  fh^.tempNum := num;
  37.  gdos^.tempFile[num] := fh;
  38.  RETURN(fh);
  39. END OpenTemporaryFile;
  40.  
  41. PROCEDURE CloseTemporaryFile(file : FileHandlePtr);
  42. BEGIN
  43.  Close(file^.handle);
  44.  gdos^.tempFile[file^.tempNum] := NIL;
  45.  Delete(file^.name);
  46.  DEALLOCATE(file,SIZE(FileHandle));
  47. END CloseTemporaryFile;
  48.  
  49. PROCEDURE WriteFile(file : FileHandlePtr;
  50.                     data : ADDRESS;
  51.                     len  : CARDINAL) : CARDINAL;
  52. VAR nwrite : CARDINAL;
  53. BEGIN
  54.  Write(file^.handle,data,len,nwrite);
  55.  RETURN(nwrite);
  56. END WriteFile;
  57.  
  58. PROCEDURE ReadFile(file : FileHandlePtr;
  59.                    data : ADDRESS;
  60.                    len  : CARDINAL) : CARDINAL;
  61. VAR nread : CARDINAL;
  62. BEGIN
  63.  Read(file^.handle,data,len,nread);
  64.  RETURN(nread);
  65. END ReadFile;
  66.  
  67. PROCEDURE SeekFile(file  : FileHandlePtr;
  68.                    pos   : LONGCARD;
  69.                    mode  : CARDINAL);
  70. VAR sm  : SeekMode;
  71. BEGIN
  72.  IF mode=offsetBeginning THEN sm := SEEKABS; END;
  73.  IF mode=offsetCurrent THEN sm := SEEKCUR; END;
  74.  IF mode=offsetEnd THEN sm := SEEKEND; END;
  75.  Seek(file^.handle,sm,pos);
  76. END SeekFile;
  77.  
  78. END DOS.